var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs')
var SALT_WORK_FACTOR = 10

var UserSchema = new mongoose.Schema({
  name: {
    unique: true,
    type: String
  },
  password: String,
  // 0: normal user
  // 1: verified user
  // 2: professonal user
  // >10: admin
  // >50: super admin
  role: {
    type: Number,
    default: 0
  },
  meta: {
    createAt:{
      type: Date,
      default: Date.now()  //创建时候的时间
    },
    updateAt: {
      type:Date,
      default: Date.now()  //更新时候的时间
    }
  }
})

//账号密码保存
UserSchema.pre('save', function(next){
  var user = this
  if (this.isNew){//判断是不是新加的数据 是的话更新为当前时间
    this.meta.createAt = this.meta.updateAt = Date.now()
  }
  else {
    this.meta.updateAt = Date.now()
  }
  //加盐
  bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){
    if (err) return next(err)
    bcrypt.hash(user.password, salt, function(err,hash){
      if(err) return next(err)
      user.password = hash
      next()
    })
  })
})

//登陆账户比对数据库
UserSchema.methods = {
  comparePassword: function(_password, cb){
    bcrypt.compare(_password, this.password, function(err, isMatch){
      if(err) cb(err)
      cb(null, isMatch)
    })
  }
}

UserSchema.statics = {
  fetch: function(cb){
    return this
      .find({}) //取出数据库所有的数据
      .sort('meta.updateAt') //按更新时间排序
      .exec(cb) //执行回调方法
  },
  findById: function(id, cb){
    return this
      .findOne({_id: id}) //查询单条数据
      .exec(cb)
  }
}

module.exports = UserSchema
